import { ExtIdTuple, ExtUUidTuple, INTEGER_PG } from "~/db.pg";
import { ExtOrder, Tradable } from "~/extend";

import type { ExtOwner } from "@/stream-user/core.define";
import { ENUM_PAYMENT, ENUM_PAYMENT_STATUS } from "@/stream-pay/core.define";
import { PaymentWeChatMp } from "@/stream-pay/schema.wxmp";

import { GemSku } from "./schema.gem";
import { AppDueSku } from "./schema.due";

/** 每个人在运营中心都有自己的账户 */
export type MarketAccount = ExtIdTuple &
  ExtOwner & {
    /** 剩余钻石 */
    gems: INTEGER_PG;
  };

/** 客户的钻石订单，分为购买、消费两种类型
 * @refOwnerUUid32 超级管理员
 * @amount 永远是人民币！
 * @refCreatorId 一定是客户自己
 * @refContactId 要把客户做成运营中心的联系人
 * @paymentType 钻石充值，一定要是 EXPENSE，代表运营中心拨付钻石
 * @paymentType 钻石消费，一定要是 INCOME，代表运营中心收到钻石（订单金额是0）
 */
export type MarketOrder = ExtUUidTuple &
  ExtOwner &
  ExtOrder &
  Tradable & {
    paymentType: ENUM_PAYMENT;
    paymentStatus: ENUM_PAYMENT_STATUS;
    justPaymentWeChatMp?: PaymentWeChatMp; // 客户的远程支付结果
  } & {
    joinGemSkuList?: GemSku[]; // 运营中心转出钻石
    joinAppDueSkuList?: AppDueSku[]; // 运营中心回收钻石
  };
